# -*- coding: utf-8 -*-
import numpy as np

a = np.array([[4,3],[2,1]])
b = np.array([[1,1],[0,1]])

#逻辑运算
print np.logical_or(a==b, a<b)
print np.any(a==b)
print np.all(a>b)

#对每个元素操作
print a<3
print a**2
print a*b
a *= 3
print np.add(a,b) #跟a+b一样
np.add(a,b,a) #跟a+=b一样
print a

#通用函数
print np.exp(a)
print np.sort(a) #对每行排序
'''
当使用ufunc函数对两个数组进行计算时，ufunc函数会对这两个数组的对应元素进行计算，因此它要求这两个数组的形状相同。
如果形状不同，会进行如下的广播(broadcasting)处理：
1. 让所有输入数组都向其中维数最多的数组看齐，shape属性中不足的部分都通过在前面加1补齐。
2. 输出数组的shape属性是输入数组的shape属性的各个轴上的最大值。
3. 如果输入数组的某个轴的长度为1或与输出数组的对应轴的长度相同时，这个数组能够用来计算，否则出错。
4. 当输入数组的某个轴的长度为1时，沿着此轴运算时都用此轴上的第一组值。
'''
#将a视为1维数组
print a.max() #a.func()等同于np.func(a)
print a.argmin()
print a.sum()
#以下4个为统计函数
print a.mean()
print a.var()
print a.std()
print np.cov(a)
#也可以对指定的维操作,例如
print a.sum(axis=0)
print np.add.reduce(a,axis=1)
print np.add.accumulate(a,axis=1) #于reduce不同的是它保留中间结果

print np.inner(a,a) #计算两个数组最后1维的内积
print np.multiply.outer([1,2,3,4,5],[2,3,4]) #先使第一个参数的shape变为(5,1),再multiply,再执行squeeze剔除长度为1的轴
a = np.random.random((3,4,5))
b = np.random.random((6,7,8))
print np.outer(a,b).shape #(3*4*5, 6*7*8)

